Update pomoci DB controls. kdyz je v tabulce JOIN, FireBird
Otázka od: Benda Lukas
9. 12. 2003 19:08
Potrebuji tabulky spojit pomoci JOIN nebo GROUP BY, ale pak potrebuju
pomoci standardnich ovladacich updatovat policka v obou tabulkach.
Pomoci SQL.Update umim updatovat jednu z nich. Jak updatovat oba? (pokud
mozno pomoci IBX, nebo FIBplus)
Lukas Benda
Odpovedá: petr palicka
10. 12. 2003 7:25
Ahoj,
ja mam podobny problem vyresen v IBX. Pouzivam
TIBDataSet. Vystrihl jsem ti ho z DFM a jeste
dodavam udalost BeforePost, kde si resim update
joinovane tabulky. Asi se zalamou radky, ale
snad ti to bude zrejme. Me staci update pripojene
tabulky jenom v pripade, ze sloupec ASpravce nastavim
na hodnotu A, ty si to uprav podle svyho.
peca
inherited IBDataSet1: TIBDataSet
BeforePost = IBDataSet1BeforePost
DeleteSQL.Strings = (
'delete from AKCIE'
'where'
' AKCIE = :OLD_AKCIE')
InsertSQL.Strings = (
'insert into AKCIE'
' (AKCIE, Osoba, APOHYB, SERIE, ACISLO, CDIL, JDIL,'
' ADATUM, DATZM, DATPOR, POZN, Davka, Platna)'
'values'
' (:AKCIE, :Osoba, :APOHYB, :SERIE, :ACISLO, :CDIL, :JDIL,'
' :ADATUM, :DATZM, :DATPOR, :POZN, :Davka, :Platna)')
RefreshSQL.Strings = (
'Select'
' A.AKCIE, A.Osoba, O.RC, O.PJM, A.APOHYB, CP.APNAZEV, CP.AKS,'
' A.SERIE, A.ACISLO, A.CDIL, A.JDIL, A.ADATUM, A.POZN, A.Davka,'
' A.DATZM, A.DATPOR, Sp.ASpravce, A.DKS, A.Platna, D.OP'
'from'
' Osoba O'
' inner join AKCIE A on O.Osoba = A.Osoba'
' left join CisAPoh CP on CP.APohyb = A.APohyb'
' left join Spravce Sp on Sp.Serie = A.Serie and'
' Sp.ACislo = A.ACislo and'
' Sp.Osoba = A.Osoba'
' left join Davka D on D.Davka = A.Davka'
'where'
' AKCIE = :AKCIE')
SelectSQL.Strings = (
'Select'
' A.AKCIE, A.Osoba, O.RC, O.PJM, A.APOHYB, CP.APNAZEV, CP.AKS,'
' A.SERIE, A.ACISLO, A.CDIL, A.JDIL, A.ADATUM, A.POZN, A.Davka,'
' A.DATZM, A.DATPOR, Sp.ASpravce, A.DKS, A.Platna, D.OP'
'from'
' Osoba O'
' inner join AKCIE A on O.Osoba = A.Osoba'
' left join CisAPoh CP on CP.APohyb = A.APohyb'
' left join Spravce Sp on Sp.Serie = A.Serie and'
' Sp.ACislo = A.ACislo and'
' Sp.Osoba = A.Osoba'
' left join Davka D on D.Davka = A.Davka')
ModifySQL.Strings = (
'update AKCIE'
'set'
' Osoba = :Osoba,'
' APOHYB = :APOHYB,'
' SERIE = :SERIE,'
' ACISLO = :ACISLO,'
' CDIL = :CDIL,'
' JDIL = :JDIL,'
' ADATUM = :ADATUM,'
' POZN = :POZN,'
' Platna = :Platna'
'where'
' AKCIE = :OLD_AKCIE')
GeneratorField.Field = 'AKCIE'
GeneratorField.Generator = 'GNR_KLIC'
Top = 160
end
procedure TfRegAkcie.IBDataSet1BeforePost(DataSet: TDataSet);
var
q: TIBSQL;
DoCommit: Boolean;
begin
if DataSet.FieldByName('ASPRAVCE').AsString='A' then
begin // staci hlidat nastaveni na "A"
q:=TIBSQL.Create(Self);
try
q.Transaction:=TIBDataSet(DataSet).Transaction;
q.Database:=TIBDataSet(DataSet).Database;
q.SQL.Text:=
'update Spravce set'#13+
' Osoba = '+DataSet.FieldByName('Osoba').AsString+#13+
'where'#13+
' Serie = '''+DataSet.FieldByName('Serie').AsString+''' and'#13+
' ACislo = '+DataSet.FieldByName('ACislo').AsString;
q.ExecQuery;
finally
q.Free;
end;
end;
inherited;
end;